export default {
	data() {
		return {
			// 基础请求参数
			params: {
				page: 1,
				size: 10
			},
			service: '', // 请求服务
			mixinParamsFn: '' // 混入参数函数 空就不混入  函数接收三个参数 当前选中的 子项目item resolve reject
		};
	},
	// watch: {
	// 	// 改变 当前 tab 的时候页数需要重置为1 需要将tab 选中值 改变为 tabActive 字段
	// 	tabActive() {
	// 		this.params.page = 1;
	// 	}
	// },
	methods: {
		// 下拉刷新
		onRefresh(item) {
			setTimeout(() => {
				item.finished = true;
				item.isLoading = false;
				item.page = 1;
				this.onLoad(item);
				this.$toast('刷新成功');
			}, 1000);
		},
		// 下一页
		nextPage(item, res) {
			item.page++;
			item.goodsList = [...item.goodsList, ...res.list];
			if (res.subData) {
				item.subData = res.subData;
			}
		},
		// 下拉刷新等进入第一页状态
		onePage(item, res) {
			item.goodsList = [];
			item.goodsList = [...res.list];
			if (res.subData) {
				item.subData = res.subData;
			}
		},
		// 请求前通过选中子项目 来判断需要传入分配参数
		mixinParams(fn, item) {
			return new Promise((resolve, reject) => {
				fn(item, resolve, reject);
			});
		},
		// 上拉加载
		async onLoad(item, pullRefresh) {
			// 异步更新数据

			const _params = await this.mixinParams(
				this.mixinParamsFn
					? this.mixinParamsFn
					: r => {
							r({});
					  },
				item
			);
			this.params.page = item.page;
			this.params = {
				...this.params,
				..._params
			};
			this.service({
				...this.params
			}).then(res => {
				pullRefresh ? this.nextPage(item, res) : this.onePage(item, res);
				item.loading = false;
				// 没有任何数据 不展示列表
				if (item.goodsList.length == 0) {
					item.finished = true;
				}
				// 数据加载是否全部完成
				if (item.goodsList.length >= res.pagination.total) {
					item.finished = true;
				} else {
					item.finished = false;
				}
			});
		}
	}
};
